#ifndef APPLICATION_H
#define APPLICATION_H

#include <Ogre.h>
#include "./CustomInputManager/CustomInputManager.h"
#include "./GraphicManager/GraphicManager.h"
#include "./PhysicManager/PhysicManager.h"
#include "./MovableObject/Player.h"
#include "./MovableObject/Platform.h"
#include "./Trigger/TriggerEvent.h"
#include "./Trigger/BlackHole.h"

class Application
{
public:
    static const Ogre::String ROOT_NODE;

    static Application& getInstance();
    ~Application();

    void go();

    CustomInputManager* getCustomInputManager() const;
    GraphicManager* getGraphicManager() const;
    PhysicManager* getPhysicManager() const;

    Ogre::Root* getRoot() const;
    Player* getPlayer() const;

	NxPhysicsSDK* getPhysicsSDK() const;
private:
    Application();

     void createFrameListener();
     void startRenderLoop();

    CustomFrameListener* listener;
    Ogre::Root* root;
    GraphicManager* graphicMgr;
    CustomInputManager* customInputMgr;
    PhysicManager* physicMgr;
    Player* player;

	Platform* platform;

	//PhysX VisualDebugger.
	NxPhysicsSDK* physicsSDK;
};

#endif